package com.jlpay.open.jlpay.sdk.java.model.trans.common.response;

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import com.jlpay.open.jlpay.sdk.java.model.BaseResponse;
import com.jlpay.open.jlpay.sdk.java.model.trans.dto.CouponInfoDto;
import com.jlpay.open.jlpay.sdk.java.utils.json.JsonUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @author dengwenning
 * @since 2024/9/23
 **/
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class PreAuthQueryResponse extends BaseResponse {

    /**
     * 状态
     * 1：待确认
     * 2：成功
     * 3：失败
     */
    private String status;
    /**
     * 商户号
     */
    private String mchId;
    /**
     * 平台订单号
     */
    private String transactionId;
    /**
     * 外部订单号
     */
    private String outTradeNo;
    /**
     * 渠道订单号
     */
    private String chnTransactionId;
    /**
     * 授权码
     */
    private String guaranteeAuthCode;
    /**
     * 交易金额
     */
    private String totalFee;
    /**
     * 订单时间
     */
    private String orderTime;
    /**
     * 交易时间
     */
    private String transTime;
    /**
     * 终端号
     */
    private String termNo;
    /**
     * 终端设备号
     */
    private String deviceInfo;
    /**
     * 备注
     */
    private String remark;
    /**
     * 操作员
     */
    private String opUserId;
    /**
     * 门店号
     */
    private String opShopId;
    /**
     * 实际付款金额
     */
    private String finnalAmount;
    /**
     * 优惠总金额
     */
    private String discountAmount;
    /**
     * 优惠活动名称
     */
    private String discountName;
    /**
     * 优惠信息
     */
    @JsonAlias({"coupon_Info", "coupon_info", "couponInfo"})
    private Object couponInfo;
    /**
     * 交易类型
     */
    private String payType;
    /**
     * 用户openid
     */
    private String subOpenid;

    public List<CouponInfoDto> getCouponsInfo() {
        if (couponInfo instanceof List) {
            return (List<CouponInfoDto>) couponInfo;
        }
        if (couponInfo instanceof String) {
            return JsonUtils.parseList((String) couponInfo, CouponInfoDto.class);
        }
        return null;
    }
}
